1. Field of the Invention
The present invention relates generally to interactive software engineering tools including editors for source code such as a programming or mark-up language, and more particularly to facilities for supporting undo and/or redo operations on a token-oriented representation.
2. Description of the Related Art
In an editor for computer programs, it may be desirable to represent program code using a token-oriented representation, rather than as simply a linear sequence of characters. In such a representation, the linear sequence of characters that corresponds to program code may be divided into substrings corresponding to the lexical tokens of the particular language. In some implementations, this representation of a stream of tokens can updated incrementally after each user action (for example, after each keystroke) using techniques such as those described in U.S. Pat. No. 5,737,608 to Van De Vanter, entitled “PER KEYSTROKE INCREMENTAL LEXING USING A CONVENTIONAL BATCH LEXER.” In general, such updates may require the insertion and/or deletion of tokens in or from the token stream.
A commonly supported and highly desirable function of conventional text editors is “Undo-Redo.” This function permits a user to reverse the effects of the most recently performed editing operation (i.e., to Undo it), and then optionally to reverse the undo in order to get back to the original state (i.e., Redo the Undo). It is generally desirable for such Undo-Redo functionality to permit a compound or multi-step Undo operation, thereby permitting the user to unwind as many of the most recently performed editing operations as desired. A compound Redo correspondingly reverses a sequence of Undo operations.